package com.hfb.mashibing.alip8.juc.c017;

import java.util.concurrent.TimeUnit;

/**
 *
 * 锁定某个对象o，如果o里的属性值改变，不影响锁的使用，
 * 但是，当o变成另一个对象(指针变了)，则会影响锁的使用
 * 应尽力避免将锁对象的引用变成另外的对象
 */
public class T {
    Object o = new Object();

    void m() {
        synchronized(o){
            while(true){
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName());
            }
        }
    }
    
    public static void main(String[] args) {
        final T t = new T();

        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Thread t2 = new Thread(t::m, " t2");

        t.o = new Object();
        t2.start();
    }
}
